iT邦幫忙

2023 iThome 鐵人賽

0
自我挑戰組

chatGPT 帶你從零開始寫 websocket 連線遊戲系列 第 31

#31 如何在 heroku 上配置 wss 和停用 ws (強制使用 wss)?

  • 分享至 

  • xImage
  •  

D29 提到關於 wss 的問題,今天算是終於解決了。目前在github頁面可以透過 wss 協議連到 heroku 上面的主機。這邊也整理一下自己這段過程,希望對大家有些幫助。

配置 wss

自動配置 (官方建議)

官方建議使用 ACM (Automated Certificate Management) 自動配置,底層使用 Let’s Encrypt,指令其實比想像中簡單。

heroku certs # 確認目前配置的憑證
heroku certs:auto:enable # 啟用 ACM
heroku certs:auto # 查詢 ACM 的配置狀態

配置的速度其實蠻快的,只是我被文件上一段敘述誤導,後來才知道只有「配置到自訂域名」的時候才需要等待 45-60 分鐘。

需要配置自訂域名的話可以參考這篇

手動配置

有三種常見的情況只能透過手動配置完成

  • eco 付費方案。
    假如為了省錢選這個方案的話,就可能需要注意一下
  • 可以支援任意子網域的萬用憑證 *.example.com
  • OV/EV 等級的證書 (通常是企業、金融業需要更高等級的驗證)

詳細過程也有官方文章可以參考。

大致流程是生成金鑰、產生 CSR (certificate signing request) 憑證申請、提交 CSR 給 SSL 服務商簽核,最後拿到 server.key 和對應的 .crt 或 .pem 檔就完成了。

官方也有自己推薦的 addons 廠商,但就是要花錢,用之前需要再算一下成本

停用 ws (強制使用 wss)

這邊需要補充一下情境:

  • app 收到的封包其實是透過 heroku 重新導向的 (帶有 X-Forwarded-* 標頭)
  • heroku 本身沒有提供平台層級的設定參數可以控制是否要強制使用 wss

基於以上狀況,大致有兩個思路:

  • 在 websocket upgrade 階段排除 http 的連線
  • 在 websocket 連線階段排除 ws 的連線

個人認為在 upgrade 排除會比較單純,因為在連線過程中只需要檢測一次即可。
但詳細還需要確認 websockets 那邊的實作,後續待補


上一篇
D30 尾聲 - 心得
系列文
chatGPT 帶你從零開始寫 websocket 連線遊戲31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言